/**
 * 文件上传后的附件信息
 */
package ms.core.common.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import lombok.Data;
import ms.core.tool.JsonTool;

@Data
public class UploadedFileUtils {
	/**
	 * 上传的附件
	 * @author lms
	 */
	@Data
	public static class Annex {
		private String dst;				// 附件磁盘文件名称
		private String src;				// 附件原文件名称
		private String fieldName;		// 附件上传字段
	}
	
	/**
	 * 存储数据库文件信息
	 * @author lms
	 */
	@Data
	public static class FileDoc {
		private String catalog;			// 附件所属分类
		private String name;			// 原始文件名
		private String file;			// 存储磁盘文件全名(带路径)
		private String desc;			// 文件描述
	}
	
	@Data
	public static class UrlDoc {
		private String catalog;			// 附件所属分类
		private String name;			// 原始文件名
		private String url;				// 文件url路径
		private String desc;			// 文件描述
	}

	/**
	 * 附件上传结果信息转文件
	 *  注:无文件描述字段
	 * 
	 * @param mapUpl
	 * @return
	 */
	public static List<FileDoc> getFileDocList(Map<String, Object> mapUpl) {
		List<Annex> annexs = JsonTool.jsonToListBean(mapUpl.get("files"), Annex.class);
		if (annexs==null || annexs.size()==0)
			return null;

		List<FileDoc> list = new ArrayList<>();
		for(Annex annex: annexs) {
			FileDoc item = new FileDoc();
			item.setName(annex.getSrc());
			item.setFile(annex.getDst());
			list.add(item);
		}

		return list;
	}

	/**
	 * 附件上传结果信息转文件
	 *  注:文件描述字段要与上传文件对应，上传附件字段命名与文件描述字段序号需一致。
	 *  如：文件描述字段是 xxx1，则文件上传字段需为yyy1。
	 *  mapUrl {"catalog1":"2024","desc1":"2014年检查记录A","files":[{"fieldName":"doc1","src":"2024年检查记录报告.docx","dst":"d:/temp/21EC20203AEA1069A2DD08002B30309D.docx"}]}
	 * 
	 * @param cataField 文件所属分类字段
	 * @param descField 文件描述字段
	 * @param fileField 上报文件字段
	 * @param mapUpl
	 * @return
	 */
	public static List<FileDoc> toFileDocList(String cataField, String descField, String fileField, Map<String, Object> mapUpl) {
		List<Annex> annexs = JsonTool.jsonToListBean(mapUpl.get("files"), Annex.class);
		if (annexs==null || annexs.size()==0)
			return null;
		
		List<FileDoc> list = new ArrayList<>();
		for(Annex annex: annexs) {
			FileDoc item = new FileDoc();
			item.setName(annex.getSrc());
			item.setFile(annex.getDst());			
			// 文件序号标识
			String flag = annex.getFieldName().replaceFirst(fileField, "");
			
			// 获取文件描述
			String fileDesc = descField+flag;
			item.setDesc(JsonTool.getStrValue(mapUpl, fileDesc, ""));
			// 获取文件分类
			String catalog = cataField+flag;
			item.setCatalog(JsonTool.getStrValue(mapUpl, catalog, ""));

			list.add(item);
		}

		return list;
	}
}